package com.bsh.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.bsh.api.params.DtoTransferBalance;
import com.bsh.dto.UserListQryDto;
import com.bsh.mybatis.dataView.UserAccountInfo;
import com.bsh.mybatis.model.Account;
import com.bsh.mybatis.model.AccountChangeAudit;
import com.bsh.utils.Pager;

public interface AccountService {

	/**
	 * 取得用户账户信息
	 * 
	 * @param userid
	 * @return
	 */
	UserAccountInfo getUserAccountInfo(int userid);

	/**
	 * 审核后台直接修改资金
	 * @param changeId
	 * @param auditorId
	 * @param isPass
	 * @return -1账户不存在，0:未处理，-100 账户资金余额不足 -101 账户商币余额不足 ,大于0成功
	 */
	String auditAccountChange(Integer changeId,Integer auditorId,boolean isPass);
	/**
	 * 后台直接加现金
	 * 
	 * @param accChangeInfo
	 *            用户账户变动信息
	 * @param adminId
	 *            操作管理员id
	 * @param cloudMoneyType 0:收款  1:消费
	 * @return
	 * -100 账户资金余额不足
	 * -101 账户商币余额不足
	 */
	Integer editAccoutnMoney(AccountChangeAudit changeInfo);
	/**
	 * 后台直接加商币
	 * 
	 * @param accChangeInfo
	 *            用户账户变动信息
	 * @param adminId
	 *            操作管理员id
	 * @param cloudMoneyType 0:收款  1:消费
	 * @return
	 * -100 账户资金余额不足
	 * -101 账户商币余额不足
	 */
	Integer editAccoutnCloudMoney(AccountChangeAudit changeInfo);
	/**
	 * 修改账户支付密码
	 * 
	 * @param accInfo
	 * @return
	 */
	Account getAccountByUserId(int userid);

	/**
	 * 修改账户支付密码
	 * 
	 * @param accInfo
	 * @return
	 */
	Integer editAccountPassword(Account accInfo);

	/**
	 * Api 余额转账
	 * @param userName
	 * @param toUserName
	 * @param money
	 * @param ip
	 * @param memo
	 * @return
	 */
	Integer financeTransferBalance(String userName, String toUserName,BigDecimal money, String ip, String memo);

	/**
	 * 创建account用户，如果存在直接返回accountId
	 * 
	 * @param userid
	 * @return accountId
	 */
	Integer newAccountByUser(int userid);

	/**
	 * 审核提现申请
	 * 
	 * @param user
	 * @return
	 */
	int auditCash(int askid, boolean isPass, String auditMsg,int adminId, String adminName,String ip);

	/**
	 * 撤消提现申请
	 * 
	 * @param user
	 * @return
	 */
	int auditCashCancel(int askid);

	/**
	 * 审核确认打款
	 * 
	 * @param user
	 * @return
	 */
	int auditPay(int askid, String payMsg, int adminId, String adminName, String ip);
	
	/**
	 * 审核确认打款_批量
	 * 
	 * @param user
	 * @return
	 */
	int auditPayBatch(String askidList, String payMsg, int adminId, String adminName, String ip);

	/**
	 * 创建account 重载形参带ip,
	 * @param userid
	 * @param ip
	 * @return
	 */
    Integer newAccountByUser(int userid, String ip);

	/**
	 * 在线转帐回调
	 * @param sn
	 * @param outerSn
	 * @param resultCode
	 * @return
	 */
	Integer financeTransferOnlineWebHook(String sn,String outerSn,String resultCode);

	/**
	 * 在线充值回调
	 * @param sn
	 * @param outerSn
	 * @param resultCode
	 * @return
	 */
	Integer financeRechargeWebHook(String sn, String outerSn, String resultCode);

	/**
	 * 在线支付升级会员回调
	 * @param sn
	 * @param outerSn
	 * @param resultCode
	 * @return
	 */
	Integer financeUpgradeMemberWebHook(String sn, String outerSn, String resultCode);

	/**
	 * 在线转帐
	 * @param userName
	 * @param toUserName
	 * @param money
	 * @param ip
	 * @param memo
	 * @param paymentType
	 * @return
	 */
	DtoTransferBalance financeTransferOnline(String userName, String toUserName, BigDecimal money, String ip,
			String memo, String paymentType);
	
	/**
	 * 根据主键查对象
	 * @param id
	 * @return
	 */
	Account selectByPrimaryKey(Integer id);	

	/**
	 * 成为合伙人加商币
	 * @param partnerid
	 * @param ip
	 * @return
	 */
	Integer partnerNewAddCloudMoney(int partnerid,String ip);
	
	/**
	 * 账户列表
	 * @param pager
	 * @param qryParam
	 * @return
	 */
	List<Map<String, Object>> getPage(Pager pager,UserListQryDto qryParam);
	
	/**
	 * 升级合伙人加商币
	 * @param partnerid 合伙人id 
	 * @param upLevel   升级后级别
	 * @param ip        ip
	 * @return
	 */
	Integer partnerUpgradeAddCloudMoney(int partnerid,int upLevel, String ip);

	List<Map<String, Object>> getAccountListExport(UserListQryDto qryParam);
}